/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Interface.Fisica;

import jogopoo.Util.Matematica;
import java.awt.Image;
import java.util.ArrayList;
import jogopoo.Grafico.GrafCenario;
import jogopoo.Personagem.PersonagemRot;

/**
 *
 * @author Administrador
 */
public class ObjFisico extends PersonagemRot{
    public ObjFisico(GrafCenario cenario, Image[] desenho,float massa){
        super(cenario,desenho);
        this.velocidadeX = 0;
        this.velocidadeY = 0;
        this.m = massa;
    }
public int adicionaVetor(double modulo, double teta){
    Vetor v = new Vetor(modulo,teta);
    lista_vetor.add(v);
    return lista_vetor.size();
    }
public int atuaPeso(){
       return this.adicionaVetor(m,Math.toRadians(270));
}
/**
 * Faz calculos necessarios de acordo com a lista de vetores para posicionar
 * o objeto nas coordenadas do instante, ou seja, mover-se
 */
public void move(){
    for(int i = 0;i < lista_vetor.size(); i++){
        velocidadeX += lista_vetor.get(i).decompoemX()/m;
        velocidadeY += lista_vetor.get(i).decompoemY()/m;
    }
    
    posicao.x +=   velocidadeX;
    posicao.y += - velocidadeY;
}
/**
 * Seta o atributo Teta para o angulo resultante das forças aplicadas
 */
public void TetaSetResult(){
    this.teta =  Math.atan(velocidadeY/velocidadeX);
     if(velocidadeY < 0 && velocidadeX < 0)
     teta +=  Math.PI;
     else if(velocidadeX < 0)
        teta = teta + Math.PI;
}

/**
 * Calcula a força de gravitacao apartir do objeto de parametro para o
 * vetor de indice "indice" que esta no parametro
 */
public double setForcaG(Planeta planeta,int indice){
                double d = Matematica.distanciaPers(this,planeta);
                this.lista_vetor.get(indice).setTeta(Matematica.direcaoPonto(posicao.x,posicao.y,
                planeta.getPosicao().x,
                planeta.getPosicao().y));
                if(d != 0 && d > 32)
                this.lista_vetor.get(indice).setModulo((planeta.getM()*m)/(d*d));
                return d;
}
/**
 * Aplica forca Instantanea ao objeto.
 */
public void aplicaFIntantanea(double modulo,double teta){
                velocidadeX += modulo*Math.cos(teta);
                velocidadeY += modulo*Math.sin(teta);
}
protected ArrayList<Vetor> lista_vetor = new ArrayList<Vetor>();
protected double m; //massa
protected double velocidadeX;
protected double velocidadeY;
}
